package org.dbpedia.mappings.missingbot.create.airpedia;
import net.sourceforge.jwbf.core.contentRep.Article;
import net.sourceforge.jwbf.mediawiki.bots.MediaWikiBot;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.concurrent.Immutable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by peterr on 22.08.14.
*/
public class AirpediaPropertyMapping extends Article {
public List<Pair<String, String >> properties = new ArrayList<>();
static String property_template = "\t{{ PropertyMapping | templateProperty = %s | ontologyProperty = %s }}\n";
static String mapping_pattern = "\\| mappings = \n";
public AirpediaPropertyMapping(MediaWikiBot bot,
String title) {
super(bot, title);
}
public void addProperty(String property, String ontology) {
properties.add(new ImmutablePair<String, String>(property, ontology));
}
public boolean isEmpty() {
return this.getText().length() == 0;
}
public boolean hasMapping() {
Matcher m = Pattern.compile(mapping_pattern).matcher(this.getText());
return m.find();
}
public String buildPropertyMapping() {
String property_txt = "";
for(Pair<String, String> prop : properties) {
String template_property = prop.getLeft();
String ontology_property = prop.getRight();
// check if property (template_property) exists
if(!this.getText().contains(template_property)) {
property_txt += String.format(property_template, template_property, ontology_property);
}
}
return property_txt;
}
public void save() {
Matcher m = Pattern.compile(mapping_pattern).matcher(this.getText());
m.find();
String new_text = this.getText().substring(0, m.end()) +
buildPropertyMapping() +
this.getText().substring(m.end());
this.setText(new_text);
super.save();
}
}